<?php namespace Admin\Controller;
use Hdphp\Controller\Controller;
//后台——商品控制器
class GoodsController extends CommonController{
	//HdPHP自定义构造函数
	private $goods_model;
	public function __init()
	{
		//调用CommonController里的构造函数
		parent::__init();
		//实例化goods模型 (频繁使用 写在构造方法里)
		$this->goods_model = new \Common\Model\Goods;
	}
	
	public function index(){
		//统计总条数
		$total = $this->goods_model->count();
		$page = Page::row(6)->make($total);
		View::with('page',$page);
		//获取商品列表  并且没有放入回收站
		$goodsData = $this->goods_model->where("is_delete=0")->limit(Page::limit())->orderBy('add_time','DESC')->get();
		
		View::with('goodsData',$goodsData);
		View::make();
	}
	//添加
	public function add(){
		if(IS_POST){
//		   p(Q("post."));exit;
		   if(!$this->goods_model->store()) View::error($this->goods_model->getError());
		   View::success('添加成功',U('index'));
		}
		
		//添加商品页面，在用户点击 提交按钮 之前，页面上需要具有的数据信息。
		//1、获取商品分类 数据
		$gcateModel = new \Common\Model\Gcate;
		$gcateData = $gcateModel->get();
		//把数据变为树状结构（若与HDphp中的默认参数，必须写自己数据库表里字段名！）
		$gcateData = Data::tree($gcateData,'cate_name','cate_id','p_id');//递归，多层。
		View::with('gcateData',$gcateData);
		
		//2、获取品牌表 所有数据
		$brandModel = new \Common\Model\Brand;
		$brandData = $brandModel->get();
		View::with('brandData',$brandData);
		
		View::make();
	}
    //抓取元素 发送异步  异步调取分类对应的属性和规格
    //依据 商品分类表gcategory里的外键form_fid，把这个id通过异步提交过来。
    //下面的方法 接到这个id，实例化类型属性表，以$fid为条件，去类型属性表里取数据。
	public function ajax_typeAttr(){
		//p(Q("post."));
		$fid = Q('post.id',0,'intval');
		//类型属性表中信息
		$fattrModel = new \Common\Model\Fattr;
		$data = $fattrModel->where("form_fid={$fid}")->get();
		//p($data);
		foreach($data as $k=>$v){
			$data[$k]['fattr_value'] = explode('|', $v['fattr_value']);
	
		}
		//把符合条件的数据，取出，发给页面。
		echo json_encode($data);
	}
	//编辑商品
	public function edit(){
		if(IS_POST){
		//页面各元素，提交，打印出来的信息。
	    //p(Q("post."));exit;
        //p($_POST);exit;
		    if(!$this->goods_model->edit()) View::error($this->goods_model->getError());
			View::success('修改成功',U('index'));
		}
		
		//当用户点击商品列表页中的，“编辑”按钮时，这时便能接收传过来的goods_id,即编辑哪个商品，id被接到。
		$goods_id = Q('get.goods_id',0,'intval');
		$fid = Q('get.fid',0,'intval');
		
//		方法一：两表关联查询取数据。
		//获取商品表信息 即取旧数据
		$goodsModel = new \Common\Model\Goods;
		$oldData = $goodsModel->join('goods_detail','goods_goods_id','=','goods_id')
							  ->where("goods_id={$goods_id}")->find();
		//把获取到的 商品详细表中的商品图册 这个字段里的字符串，使用explode()方法，将其：按|拆分成数组
		$oldData['goods_img'] = explode("|", $oldData['goods_img']);
		//p($oldData['goods_img']);
		View::with('oldData',$oldData);
		
//		方法二：单个表 一 一 取数据。
		//获取商品表信息
/*		$oldgoodData = $goodsModel->where('goods_id='.$goods_id)->find();
		View::with('oldgoodData',$oldgoodData);
		//获取商品详情表信息
		$olddetailData = Db::table('Goods_detail')->where('goods_id='.$goods_id)->find();
		//把获取到的 商品详细表中的商品图册 这个字段的所存的字符串，使用explode()方法，将其：按|拆分成数组
		$olddetailData['goods_img']=explode(',',$olddetailData['goods_img']);
		View::with('olddetailData',$olddetailData);*/
		
//		方法一：两表关联查询取数据。	
		//获取商品属性表的信息(关联类型属性表fattr)
		// ————把用户添加时选择的 商品属性的相关信息 存入商品属性表中的，现在调取出来显示。or进行再编辑。
		// ————类型属性表的主键fa_id 与商品属性表中的外键fattr_fa_id 关联上，查询数据。
		$gattrModel = new \Common\Model\Goods_attr;
		$gattrData = $gattrModel->join('fattr','fa_id','=','fattr_fa_id')
		                        ->where('goods_goods_id='.$goods_id)->get();
		//把获取到的 中的类型属性表中的字段fattr_value属性值，转化成数组
		foreach ($gattrData as $k=> $v){
				$gattrData[$k]['fattr_value']=explode('|', $v['fattr_value']);
		}
		//fattr_type 重组数组  ————0规格 1属性
		$arr = array();
		foreach ($gattrData as $k => $v){
			$arr[$v['fattr_type']][]=$v;
//			$arr[$v['fattr_name']][]=$v;
			
		}
		//两表联查，数组重组，打印出来的关于规格or属性信息。（或用户选择属性和规格，打印出来的是属性和规格；若用户选择的只是规格，打印出来的就只是规格）
		//p($arr);exit;
		
//		方法二：
		//类型属性表中信息
/*		$fattrModel = new \Common\Model\Fattr;
		$fattrData = $fattrModel->where("form_fid={$fid}")->get();
		//商品属性表
		$gattrModel = new \Common\Model\Goods_attr;
		$gattrData = $gattrModel->where("goods_goods_id={$goods_id}")->get();
		//p($gattrData);
		foreach($fattrData as $k=>$v){
			$fattrData[$k]['fattr_value'] = explode('|', $v['fattr_value']);
			foreach($gattrData as $kk=>$vv){
				if($v['fa_id'] == $vv['fattr_fa_id']){
					$fattrData[$k]['attr_price']  = $vv['attr_price'];
					$fattrData[$k]['ga_value']  = $vv['ga_value'];
				}
				
			}
			
		}
		//p($fattrData);exit;
		$arr = array();
		if(is_array($fattrData)){
			foreach($fattrData as $k=>$v){
				//分别取出来  放在一个组里面.
				$arr[$v['fattr_type']][] = $v;
			}
		}*/
		//p($arr);exit;
		View::with('arr',$arr);
		
		//除了，根据商品goods_id获取旧数据，之外，页面上还应该有的一些数据。
		//1.获得商品分类表信息 (1.默认显示时，旧数据的当前分类与其比对； 2.用户再次编辑的时候，可以再次选择其他分类) --调取这个表的用意！
		$gcateModel = new \Common\Model\Gcate;
	    $gcateData = $gcateModel->get();
		$gcateData = Data::tree($gcateData,'cate_name','cate_id','p_id');
		View::with('gcateData',$gcateData);
		
		//2.获得品牌表信息 (1.默认显示时，旧数据的当前品牌与其比对； 2.用户再次编辑的时候，可以再次选择其他品牌) --调取这个表的用意！
		$brandMode = new \Common\Model\Brand;
		$brandData = $brandMode->get();
		View::with('brandData',$brandData);
		
		View::make();
	}
	//删除
	public function del(){
		//接收id
		$goods_id = Q('get.goods_id',0,'intval');
		$this->goods_model->where("goods_id={$goods_id}")->save(array('is_delete'=>1));
		View::success('删除到回收站',U('index'));
	}	
	//回收站
	public function recycle(){
		//统计总条数
		$total = $this->goods_model->where("is_delete=1")->count();
		$page = Page::row(6)->make($total);
		View::with('page',$page);
		$goodsData = $this->goods_model->where("is_delete=1")->limit(Page::limit())->get();
//		p($goodsData);
		View::with('goodsData',$goodsData);
		View::make();
	}
	//还原
	public function restore(){
		//接收id
		$goods_id = Q('get.goods_id',0,'intval');
		$this->goods_model->where("goods_id={$goods_id}")->save(array('is_delete'=>0));
		View::success('还原成功',U('recycle'));
	}
	//真正删除
	public function realDel(){
		//接收id
		$goods_id = Q('get.goods_id',0,'intval');

		//删除列表图
		$list_pic = $this->goods_model->where("goods_id={$goods_id}")->pluck('list_pic');
		//删除文件
		if(is_file($list_pic)){
			unlink($list_pic); 
		}
		//删除商品表 ok
		$this->goods_model->where("goods_id={$goods_id}")->delete();
		
		//删除商品详细表
		$gdetailModel = new \Common\Model\Goods_detail;
		//删除商品相册 ok
		$goods_img = $gdetailModel->where("goods_goods_id={$goods_id}")->pluck('goods_img');
		if($goods_img){
			$goods_img = explode('|', $goods_img);
			//把字符串 转 数组 将数组里的每个单元 全部从文件夹中删掉
			foreach($goods_img as $v){
				//删除文件
				if(is_file($v)){
					unlink($v);
				}
			}
		}
		$gdetailModel->where("goods_goods_id={$goods_id}")->delete();
		
		//删除商品属性表 ok
		$gattrModel = new \Common\Model\goods_attr;
		$gattrModel->where("goods_goods_id={$goods_id}")->delete();
		View::success('删除成功',U('recycle'));
	}

	//商品列表图 异步上传
	public function upload_list()
	{
	    $file = Upload::path('files/goods/list_pic')->make();
	    if(empty($file)){
			$file = Image::thumb($file[0]['path'],$file[0]['path'],275,275,2);
	        $this->ajax(Upload::getError());
	    }else{
	        //上传成功，把上传好的信息返给js
	        $data = $file[0];
	        echo json_encode($data);exit;
	    }	    
	}

	//uploadify异步上传
	public function upload_most()
	{
	    $file = Upload::path('files/goods/goods_img')->make();
		
	    if(empty($file)){
	    	$file = Image::thumb($file[0]['path'],$file[0]['path'],800,800,2);
	        $this->ajax(Upload::getError());
	    }else{
	        //上传成功，把上传好的信息返给js
	        $data = $file[0];
	        echo json_encode($data);exit;
	    }
	}



}

 ?>